
/**
 * VLAN资源池
 * 
 * 题目描述

VLAN 是一种对局域网设备进行逻辑划分的技术，为了标识不同的VLAN，引入 VLAN ID（1-4094之间的整数）的概念。

定义一个 VLAN ID 的资源池（下称VLAN资源池），资源池中连续的VLAN用 开始VLAN-结束VLAN 表示，不连续的用单个整数表示，所有的VLAN用英文逗号连接起来。

现在有一个VLAN资源池，业务需要从资源池中申请一个VLAN，需要你输出从VLAN资源池中移除申请的VLAN后的资源池。

输入描述
第一行为字符串格式的VLAN资源池

第二行为业务要申请的VLAN，VLAN 的取值范围为 [1，4094] 之间的整数。

输出描述
从输入VLAN资源池中移除申请的VLAN后字符串格式的VLAN资源池，输出要求满足题目描述中的格式，并且按照VLAN从小到大升序输出。

如果申请的VLAN不在原VLAN资源池内，输出原VLAN资源池升序排序后的字符串即可。

备注 
输入VLAN资源池中VLAN的数量取值范围为 [2-4094] 间的整数，资源池中VLAN不重复且合法（[1,4094]之间的整数），输入是乱序的。

用例
输入	
1-5
2
输出	1,3-5
说明	原VLAN资源池中有VLAN 1、2、3、4、5，从资源池中移除2后，剩下VLAN 1、3、4、5，按照题目描述格式并升序后的结果为1,3-5。
输入	
20-21,15,18,30,5-10
15
输出	5-10,18,20-21,30
说明	原VLAN资源池中有VLAN 5、6、7、8、9、10、15、18、20、21、30，从资源池中移除15后，资源池中剩下的VLAN为 5、6、7、8、9、10、18、20、21、30，按照题目描述格式并升序后的结果为5-10,18,20-21,30。
输入	
5,1-3
10
输出	1-3,5
说明	原VLAN资源池中有VLAN 1、2、3，5，申请的VLAN 10不在原资源池中，将原资源池按照题目描述格式并按升序排序后输出的结果为1-3,5。
 */

import java.util.Arrays;
import java.util.Scanner;

/**
  * 
  题目解析
本题如果当成区间问题来求解，稍显复杂。

由于题目数量级不大，因此，我们可以定义一个长度为 4095（最大的vlanID是4094） 的 bool类型数组status，
status数组每一个索引位置都对应一个valn id，而status数组的元素值就代表对应vlan id是否可用。

根据输入的第一行，我们可以解析出 VLAN资源池 的可用区段信息 [start, end]，如果没有end，则 end = start。
然后，我们将 status 数组索引 [start, end] 范围内元素都赋值为 true，表示对应 vlan id 可用。
根据输入的第二行，我们可以解析出申请使用的 vlan id，然后将对应 status 元素赋值为 false。
最后就是从 1 ~ 4095 遍历 status ，找到连续 true 的区段范围进行打印。
  */
public class VLAN资源池 {
    
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
 
        int[][] vlans = Arrays.stream(sc.nextLine().split(",")).map(s -> Arrays.stream(s.split("-")).mapToInt(Integer::parseInt).toArray()).toArray(int[][]::new);
        int req = Integer.parseInt(sc.nextLine());
 
        // status[i] 表示 vlanID i 是否可用, true表示可用, false表示不可用
        boolean[] status = new boolean[4095];
 
        for (int[] vlan : vlans) {
            int start = vlan[0];
            int end = vlan.length == 1 ? vlan[0] : vlan[1];
 
            // 将start~end范围的vlanID都置为可用
            for (int j = start; j <= end; j++) {
                status[j] = true;
            }
        }
 
        // 将vlanID req置为不可用
        status[req] = false;
 
        // 记录结果
        StringJoiner sj = new StringJoiner(",");
 
        for (int l = 1; l < 4095; l++) {
            if (!status[l]) continue; // 找到第一个可用的vlanID l
 
            for (int r = l + 1; r < 4095; r++) {
                if (status[r]) continue; // 找到第一个不可用的vlanID r
 
                // [l, r-1] 范围都是可用的
                if (l == r - 1) {
                    sj.add(l + "");
                } else {
                    sj.add(l + "-" + (r - 1));
                }
 
                l = r;
                break;
            }
        }
 
        System.out.println(sj);
    }
}
